package Leetcode;

/**
 * @Author piper
 * @Date 2019/10/21 10:26 上午
 */
public class 力扣38_报数 {

    /**
     * 遍历数字 关键是找到连续的数字
     */
    static String countAndSay(int n) {
        StringBuilder num = new StringBuilder("1"); // 第一个报数 1

        // 计算第二'项'
        for (int i = 1; i < n; i++) {
            int count = 1;  //计数
            char tmp = num.charAt(0);   //相同字符缓存
            StringBuilder cycleStr = new StringBuilder();   //n项之前各项报数

            // 从第二个数字开始遍历
            for (int c = 1; c < num.length(); c++) {
                char t = num.charAt(c); //没位数字
                //比较每位数字和缓存字符是否相等
                //相等 计数；不想等 将缓存字符加入当前'项' 然后更新计数和缓存字符
                if (t != tmp) {
                    cycleStr.append(count).append(tmp);
                    tmp = t;
                    count = 1;
                } else {
                    count++;
                }
            }

            num = cycleStr.append(count).append(tmp);   //加入最后缓存的字符
        }

        return num.toString();
    }

    public static void main(String[] args) {
        System.out.println(countAndSay(13));
    }
}
